Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / tests / backend / test_reticulum_pathfinding.py

Displaying Raw • Download


tests/backend/test_reticulum_pathfinding.py c0b0ddffd735a0d007c1be9a5e8563ec42fdafc0 (c0b0ddff) Text, 13.60 KB

T8b949e# SPDX-License-Identifier: 0BSD

Tff7b72import T7ee787time
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3AsyncMockTb4b4b4, Te6edf3MagicMockTb4b4b4, Te6edf3patch

Tff7b72import T7ee787pytest
Tff7b72import T7ee787RNS

Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backend Tff7b72import Te6edf3reticulum_pathfinding Tff7b72as Te6edf3rp
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787reticulum_pathfinding Tff7b72import Te6edf3OutboundPathOutcome

Te6edf3DEST Tff7b72= Tffa657bytesTb4b4b4(T79c0ff16Tb4b4b4)


Tff7b72def Td2a8ff_put_path_entryTb4b4b4(Te6edf3destTb4b4b4, Te6edf3entryTb4b4b4, Te6edf3cleanupTb4b4b4: Tffa657listTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72with Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffpath_table_lockTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffpath_tableTb4b4b4[Te6edf3destTb4b4b4] Tff7b72= Te6edf3entry
Te6edf3cleanupTff7b72.Td2a8ffappendTb4b4b4(Te6edf3destTb4b4b4)


Tff7b72def Td2a8fftest_should_rediscover_when_no_pathTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffhas_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3rpTff7b72.Td2a8ffshould_rediscover_pathTb4b4b4(Te6edf3DESTTb4b4b4) Tff7b72is Tff7b72True


Tff7b72def Td2a8fftest_should_rediscover_when_unresponsiveTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Tb4b4b4(
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffhas_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffpath_is_unresponsiveTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.transport_path_table_entry_is_expiredTa5d6ff"Tb4b4b4,
Te6edf3return_valueTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3rpTff7b72.Td2a8ffshould_rediscover_pathTb4b4b4(Te6edf3DESTTb4b4b4) Tff7b72is Tff7b72True


Tff7b72def Td2a8fftest_should_rediscover_when_expiredTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Tb4b4b4(
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffhas_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffpath_is_unresponsiveTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.transport_path_table_entry_is_expiredTa5d6ff"Tb4b4b4,
Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3rpTff7b72.Td2a8ffshould_rediscover_pathTb4b4b4(Te6edf3DESTTb4b4b4) Tff7b72is Tff7b72True


Tff7b72def Td2a8fftest_no_rediscover_when_freshTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Tb4b4b4(
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffhas_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffpath_is_unresponsiveTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.transport_path_table_entry_is_expiredTa5d6ff"Tb4b4b4,
Te6edf3return_valueTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3rpTff7b72.Td2a8ffshould_rediscover_pathTb4b4b4(Te6edf3DESTTb4b4b4) Tff7b72is Tff7b72False


Tff7b72def Td2a8fftest_path_metadata_no_pathTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffhas_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3m Tff7b72= Te6edf3rpTff7b72.Td2a8ffpath_metadata_for_apiTb4b4b4(Te6edf3DESTTb4b4b4)
Tff7b72assert Te6edf3mTb4b4b4[Ta5d6ff"Ta5d6ffpath_staleTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72True
Tff7b72assert Te6edf3mTb4b4b4[Ta5d6ff"Ta5d6ffpath_unresponsiveTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72False


Tff7b72def Td2a8fftest_path_table_entry_expired_ap_modeTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3iface Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3ifaceTff7b72.Td2a8ffmode Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ACCESS_POINT
Te6edf3entry Tff7b72= Tb4b4b4[
Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffAP_PATH_TIME Tff7b72- T79c0ff5Tb4b4b4,
Tff7b72NoneTb4b4b4,
T79c0ff1Tb4b4b4,
T79c0ff0Tb4b4b4,
Tff7b72NoneTb4b4b4,
Te6edf3ifaceTb4b4b4,
Tff7b72NoneTb4b4b4,
Tb4b4b4]
Tff7b72assert Te6edf3rpTff7b72.Td2a8ff_path_table_entry_is_expired_by_reticulum_rulesTb4b4b4(Te6edf3entryTb4b4b4) Tff7b72is Tff7b72True


Tff7b72def Td2a8fftest_path_table_entry_fresh_ap_modeTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3iface Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3ifaceTff7b72.Td2a8ffmode Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ACCESS_POINT
Te6edf3entry Tff7b72= Tb4b4b4[Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4, Tff7b72NoneTb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, Tff7b72NoneTb4b4b4, Te6edf3ifaceTb4b4b4, Tff7b72NoneTb4b4b4]
Tff7b72assert Te6edf3rpTff7b72.Td2a8ff_path_table_entry_is_expired_by_reticulum_rulesTb4b4b4(Te6edf3entryTb4b4b4) Tff7b72is Tff7b72False


Tff7b72def Td2a8fftest_prepare_fresh_drops_and_requests_when_staleTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3r Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Tff7b72with Tb4b4b4(
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffhas_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.should_rediscover_pathTa5d6ff"Tb4b4b4,
Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffrequest_pathTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3mock_reqTb4b4b4,
Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3rpTff7b72.Td2a8ffprepare_fresh_path_requestTb4b4b4(Te6edf3rTb4b4b4, Te6edf3DESTTb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffpath_refresh_requestedTa5d6ff"
Te6edf3rTff7b72.Td2a8ffdrop_pathTff7b72.Td2a8ffassert_called_once_withTb4b4b4(Te6edf3DESTTb4b4b4)
Te6edf3mock_reqTff7b72.Td2a8ffassert_called_once_withTb4b4b4(Te6edf3DESTTb4b4b4)


Tff7b72def Td2a8fftest_prepare_fresh_noop_when_reusingTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3r Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Tff7b72with Tb4b4b4(
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.should_rediscover_pathTa5d6ff"Tb4b4b4,
Te6edf3return_valueTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffrequest_pathTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3mock_reqTb4b4b4,
Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3rpTff7b72.Td2a8ffprepare_fresh_path_requestTb4b4b4(Te6edf3rTb4b4b4, Te6edf3DESTTb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffreused_valid_pathTa5d6ff"
Te6edf3rTff7b72.Td2a8ffdrop_pathTff7b72.Td2a8ffassert_not_calledTb4b4b4(Tb4b4b4)
Te6edf3mock_reqTff7b72.Td2a8ffassert_not_calledTb4b4b4(Tb4b4b4)


Tff7b72def Td2a8fftest_path_table_entry_expired_roaming_modeTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3iface Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3ifaceTff7b72.Td2a8ffmode Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMING
Te6edf3entry Tff7b72= Tb4b4b4[
Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffROAMING_PATH_TIME Tff7b72- T79c0ff5Tb4b4b4,
Tff7b72NoneTb4b4b4,
T79c0ff1Tb4b4b4,
T79c0ff0Tb4b4b4,
Tff7b72NoneTb4b4b4,
Te6edf3ifaceTb4b4b4,
Tff7b72NoneTb4b4b4,
Tb4b4b4]
Tff7b72assert Te6edf3rpTff7b72.Td2a8ff_path_table_entry_is_expired_by_reticulum_rulesTb4b4b4(Te6edf3entryTb4b4b4) Tff7b72is Tff7b72True


Tff7b72def Td2a8fftest_path_table_entry_fresh_roaming_modeTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3iface Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3ifaceTff7b72.Td2a8ffmode Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMING
Te6edf3entry Tff7b72= Tb4b4b4[Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4, Tff7b72NoneTb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, Tff7b72NoneTb4b4b4, Te6edf3ifaceTb4b4b4, Tff7b72NoneTb4b4b4]
Tff7b72assert Te6edf3rpTff7b72.Td2a8ff_path_table_entry_is_expired_by_reticulum_rulesTb4b4b4(Te6edf3entryTb4b4b4) Tff7b72is Tff7b72False


Tff7b72def Td2a8fftest_path_table_entry_expired_default_modeTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3iface Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3ifaceTff7b72.Td2a8ffmode Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_FULL
Te6edf3old Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffDESTINATION_TIMEOUT Tff7b72- T79c0ff1
Te6edf3entry Tff7b72= Tb4b4b4[Te6edf3oldTb4b4b4, Tff7b72NoneTb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, Tff7b72NoneTb4b4b4, Te6edf3ifaceTb4b4b4, Tff7b72NoneTb4b4b4]
Tff7b72assert Te6edf3rpTff7b72.Td2a8ff_path_table_entry_is_expired_by_reticulum_rulesTb4b4b4(Te6edf3entryTb4b4b4) Tff7b72is Tff7b72True


Tff7b72def Td2a8fftest_path_table_entry_expired_when_rvcd_if_is_noneTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3old Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffDESTINATION_TIMEOUT Tff7b72- T79c0ff1
Te6edf3entry Tff7b72= Tb4b4b4[Te6edf3oldTb4b4b4, Tff7b72NoneTb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4]
Tff7b72assert Te6edf3rpTff7b72.Td2a8ff_path_table_entry_is_expired_by_reticulum_rulesTb4b4b4(Te6edf3entryTb4b4b4) Tff7b72is Tff7b72True


Tff7b72def Td2a8fftest_transport_path_table_entry_is_expired_uses_path_tableTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3to_del Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3dest Tff7b72= Tffa657bytesTb4b4b4(Tb4b4b4[T79c0ff0x1BTb4b4b4] Tff7b72* T79c0ff16Tb4b4b4)
Te6edf3iface Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3ifaceTff7b72.Td2a8ffmode Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMING
Te6edf3_put_path_entryTb4b4b4(
Te6edf3destTb4b4b4,
Tb4b4b4[
Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffROAMING_PATH_TIME Tff7b72- T79c0ff2Tb4b4b4,
Tff7b72NoneTb4b4b4,
T79c0ff1Tb4b4b4,
T79c0ff0Tb4b4b4,
Tff7b72NoneTb4b4b4,
Te6edf3ifaceTb4b4b4,
Tff7b72NoneTb4b4b4,
Tb4b4b4]Tb4b4b4,
Te6edf3to_delTb4b4b4,
Tb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72assert Te6edf3rpTff7b72.Td2a8fftransport_path_table_entry_is_expiredTb4b4b4(Te6edf3destTb4b4b4) Tff7b72is Tff7b72True
Tff7b72finallyTb4b4b4:
Tff7b72with Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffpath_table_lockTb4b4b4:
Tff7b72for Te6edf3d Tff7b72in Te6edf3to_delTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffpath_tableTff7b72.Td2a8ffpopTb4b4b4(Te6edf3dTb4b4b4, Tff7b72NoneTb4b4b4)


Tff7b72def Td2a8fftest_path_metadata_when_has_path_staleTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Tb4b4b4(
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffhas_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.transport_path_table_entry_is_expiredTa5d6ff"Tb4b4b4,
Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffpath_is_unresponsiveTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3m Tff7b72= Te6edf3rpTff7b72.Td2a8ffpath_metadata_for_apiTb4b4b4(Te6edf3DESTTb4b4b4)
Tff7b72assert Te6edf3m Tff7b72== Tb4b4b4{Ta5d6ff"Ta5d6ffpath_staleTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4, Ta5d6ff"Ta5d6ffpath_unresponsiveTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4}


Tff7b72def Td2a8fftest_path_metadata_when_unresponsiveTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Tb4b4b4(
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffhas_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.transport_path_table_entry_is_expiredTa5d6ff"Tb4b4b4,
Te6edf3return_valueTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffpath_is_unresponsiveTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3m Tff7b72= Te6edf3rpTff7b72.Td2a8ffpath_metadata_for_apiTb4b4b4(Te6edf3DESTTb4b4b4)
Tff7b72assert Te6edf3m Tff7b72== Tb4b4b4{Ta5d6ff"Ta5d6ffpath_staleTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6ffpath_unresponsiveTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4}


Tff7b72def Td2a8fftest_prepare_fresh_uses_expire_path_without_reticulumTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Tb4b4b4(
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffhas_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.should_rediscover_pathTa5d6ff"Tb4b4b4,
Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffexpire_pathTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3exTb4b4b4,
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffrequest_pathTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3reqTb4b4b4,
Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3rpTff7b72.Td2a8ffprepare_fresh_path_requestTb4b4b4(Tff7b72NoneTb4b4b4, Te6edf3DESTTb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffpath_refresh_requestedTa5d6ff"
Te6edf3exTff7b72.Td2a8ffassert_called_once_withTb4b4b4(Te6edf3DESTTb4b4b4)
Te6edf3reqTff7b72.Td2a8ffassert_called_once_withTb4b4b4(Te6edf3DESTTb4b4b4)


Tff7b72def Td2a8fftest_lxmf_path_wait_cap_uses_rns_defaultTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3v Tff7b72= Te6edf3rpTff7b72.Td2a8fflxmf_path_wait_cap_secondsTb4b4b4(Tb4b4b4)
Tff7b72assert T79c0ff30.0 Tff7b72<Tff7b72= Te6edf3v Tff7b72<Tff7b72= T79c0ff120.0


Tff7b72def Td2a8fftest_lxmf_path_wait_cap_falls_back_when_float_failsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffPATH_REQUEST_TIMEOUTTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffxTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3rpTff7b72.Td2a8fflxmf_path_wait_cap_secondsTb4b4b4(Tb4b4b4) Tff7b72== T79c0ff30.0


Tff7b72def Td2a8fftest_nudge_path_request_forwards_to_transportTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffrequest_pathTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3mTb4b4b4:
Te6edf3rpTff7b72.Td2a8ffnudge_path_requestTb4b4b4(Te6edf3DESTTb4b4b4)
Te6edf3mTff7b72.Td2a8ffassert_called_once_withTb4b4b4(Te6edf3DESTTb4b4b4)


Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_meshchat_await_transport_path_delegates_to_moduleTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72from T7ee787meshchatxT7ee787.T7ee787meshchat Tff7b72import Te6edf3ReticulumMeshChat

Te6edf3outcome Tff7b72= Te6edf3OutboundPathOutcomeTb4b4b4(Tff7b72TrueTb4b4b4, Ta5d6ff"Ta5d6ffreused_valid_pathTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72with Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.meshchat.reticulum_pathfinding.await_transport_path_for_outbound_lxmfTa5d6ff"Tb4b4b4,
Te6edf3newTff7b72=Te6edf3AsyncMockTb4b4b4(Te6edf3return_valueTff7b72=Te6edf3outcomeTb4b4b4)Tb4b4b4,
Tb4b4b4) Tff7b72as Te6edf3mTb4b4b4:
Te6edf3inst Tff7b72= Tffa657objectTff7b72.Td2a8ff__new__Tb4b4b4(Te6edf3ReticulumMeshChatTb4b4b4)
Te6edf3instTff7b72.Td2a8ffreticulum Tff7b72= Tffa657objectTb4b4b4(Tb4b4b4)
Te6edf3r Tff7b72= Tff7b72await Te6edf3ReticulumMeshChatTff7b72.Td2a8ff_await_transport_pathTb4b4b4(Te6edf3instTb4b4b4, Te6edf3DESTTb4b4b4)
Tff7b72assert Te6edf3rTff7b72.Td2a8ffpath_available Tff7b72is Tff7b72True
Te6edf3mTff7b72.Td2a8ffassert_called_once_withTb4b4b4(Te6edf3instTff7b72.Td2a8ffreticulumTb4b4b4, Te6edf3DESTTb4b4b4)


Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_await_outbound_lxmf_returns_true_when_path_immediateTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Tb4b4b4(
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.prepare_fresh_path_requestTa5d6ff"Tb4b4b4,
Te6edf3return_valueTff7b72=Ta5d6ff"Ta5d6ffreused_valid_pathTa5d6ff"Tb4b4b4,
Tb4b4b4) Tff7b72as Te6edf3prepTb4b4b4,
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(
Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4,
Ta5d6ff"Ta5d6ffhas_pathTa5d6ff"Tb4b4b4,
Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3out Tff7b72= Tff7b72await Te6edf3rpTff7b72.Td2a8ffawait_transport_path_for_outbound_lxmfTb4b4b4(Te6edf3MagicMockTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3DESTTb4b4b4)
Tff7b72assert Te6edf3outTff7b72.Td2a8ffpath_available Tff7b72is Tff7b72True
Tff7b72assert Te6edf3outTff7b72.Td2a8ffprepare_measure Tff7b72== Ta5d6ff"Ta5d6ffreused_valid_pathTa5d6ff"
Tff7b72assert Te6edf3outTff7b72.Td2a8ffused_nudge Tff7b72is Tff7b72False
Te6edf3prepTff7b72.Td2a8ffassert_called_onceTb4b4b4(Tb4b4b4)


Tff7b72def Td2a8fftest_format_outbound_path_finding_measure_appends_nudgeTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3o Tff7b72= Te6edf3OutboundPathOutcomeTb4b4b4(Tff7b72TrueTb4b4b4, Ta5d6ff"Ta5d6ffnew_path_requestedTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72assert Te6edf3rpTff7b72.Td2a8ffformat_outbound_path_finding_measureTb4b4b4(Te6edf3oTb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffnew_path_requested+nudgeTa5d6ff"
Te6edf3o2 Tff7b72= Te6edf3OutboundPathOutcomeTb4b4b4(Tff7b72TrueTb4b4b4, Ta5d6ff"Ta5d6ffreused_valid_pathTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72assert Te6edf3rpTff7b72.Td2a8ffformat_outbound_path_finding_measureTb4b4b4(Te6edf3o2Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffreused_valid_pathTa5d6ff"


Tff7b72def Td2a8fftest_prepare_fresh_requests_when_no_path_but_rediscoverTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3r Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Tff7b72with Tb4b4b4(
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffhas_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.should_rediscover_pathTa5d6ff"Tb4b4b4,
Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffrequest_pathTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3mock_reqTb4b4b4,
Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3rpTff7b72.Td2a8ffprepare_fresh_path_requestTb4b4b4(Te6edf3rTb4b4b4, Te6edf3DESTTb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffnew_path_requestedTa5d6ff"
Te6edf3rTff7b72.Td2a8ffdrop_pathTff7b72.Td2a8ffassert_not_calledTb4b4b4(Tb4b4b4)
Te6edf3mock_reqTff7b72.Td2a8ffassert_called_once_withTb4b4b4(Te6edf3DESTTb4b4b4)


Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_await_outbound_lxmf_returns_false_after_waits_exhaustedTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3nudge Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Tff7b72with Tb4b4b4(
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.prepare_fresh_path_requestTa5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.lxmf_path_wait_cap_secondsTa5d6ff"Tb4b4b4,
Te6edf3return_valueTff7b72=T79c0ff0.0Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.nudge_path_requestTa5d6ff"Tb4b4b4,
Te6edf3nudgeTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffhas_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.asyncio.sleepTa5d6ff"Tb4b4b4,
Te6edf3new_callableTff7b72=Te6edf3AsyncMockTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.time.timeTa5d6ff"Tb4b4b4,
Te6edf3side_effectTff7b72=Tb4b4b4[T79c0ff0.0Tb4b4b4, T79c0ff0.0Tb4b4b4, T79c0ff0.0Tb4b4b4, T79c0ff0.0Tb4b4b4, T79c0ff100.0Tb4b4b4]Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3out Tff7b72= Tff7b72await Te6edf3rpTff7b72.Td2a8ffawait_transport_path_for_outbound_lxmfTb4b4b4(Te6edf3MagicMockTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3DESTTb4b4b4)
Tff7b72assert Te6edf3outTff7b72.Td2a8ffpath_available Tff7b72is Tff7b72False
Tff7b72assert Te6edf3outTff7b72.Td2a8ffused_nudge Tff7b72is Tff7b72True
Te6edf3nudgeTff7b72.Td2a8ffassert_called_onceTb4b4b4(Tb4b4b4)


Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_wait_for_path_returns_true_immediatelyTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Tb4b4b4(
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.prepare_fresh_path_requestTa5d6ff"Tb4b4b4,
Tb4b4b4) Tff7b72as Te6edf3pTb4b4b4,
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffhas_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3ok Tff7b72= Tff7b72await Te6edf3rpTff7b72.Td2a8ffwait_for_pathTb4b4b4(Te6edf3MagicMockTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3DESTTb4b4b4, T79c0ff5.0Tb4b4b4, T79c0ff0.01Tb4b4b4)
Tff7b72assert Te6edf3ok Tff7b72is Tff7b72True
Te6edf3pTff7b72.Td2a8ffassert_called_onceTb4b4b4(Tb4b4b4)


Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_wait_for_path_times_outTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Tb4b4b4(
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.prepare_fresh_path_requestTa5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffhas_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.asyncio.sleepTa5d6ff"Tb4b4b4,
Te6edf3new_callableTff7b72=Te6edf3AsyncMockTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.reticulum_pathfinding.time.monotonicTa5d6ff"Tb4b4b4,
Te6edf3side_effectTff7b72=Tb4b4b4[T79c0ff0.0Tb4b4b4, T79c0ff0.0Tb4b4b4, T79c0ff0.02Tb4b4b4]Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3ok Tff7b72= Tff7b72await Te6edf3rpTff7b72.Td2a8ffwait_for_pathTb4b4b4(Te6edf3MagicMockTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3DESTTb4b4b4, T79c0ff0.01Tb4b4b4, T79c0ff0.01Tb4b4b4)
Tff7b72assert Te6edf3ok Tff7b72is Tff7b72False


Tff7b72def Td2a8fftest_prune_expired_path_table_entries_respects_triggerTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3cleanup Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72tryTb4b4b4:
Te6edf3old Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Tb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffDESTINATION_TIMEOUT Tff7b72+ T79c0ff100Tb4b4b4)
Te6edf3entry Tff7b72= Tb4b4b4[Te6edf3oldTb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4]
Te6edf3_put_path_entryTb4b4b4(Te6edf3DESTTb4b4b4, Te6edf3entryTb4b4b4, Te6edf3cleanupTb4b4b4)
Tff7b72assert Tb4b4b4(
Te6edf3rpTff7b72.Td2a8ffprune_expired_path_table_entriesTb4b4b4(
Tff7b72NoneTb4b4b4,
Te6edf3max_to_dropTff7b72=T79c0ff10Tb4b4b4,
Te6edf3trigger_sizeTff7b72=T79c0ff10_000Tb4b4b4,
Tb4b4b4)
Tff7b72== T79c0ff0
Tb4b4b4)
Te6edf3reticulum Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3reticulumTff7b72.Td2a8ffdrop_pathTff7b72.Td2a8ffreturn_value Tff7b72= Tff7b72True
Te6edf3dropped Tff7b72= Te6edf3rpTff7b72.Td2a8ffprune_expired_path_table_entriesTb4b4b4(
Te6edf3reticulumTb4b4b4,
Te6edf3max_to_dropTff7b72=T79c0ff10Tb4b4b4,
Te6edf3trigger_sizeTff7b72=T79c0ff1Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3dropped Tff7b72== T79c0ff1
Te6edf3reticulumTff7b72.Td2a8ffdrop_pathTff7b72.Td2a8ffassert_called_once_withTb4b4b4(Te6edf3DESTTb4b4b4)
Tff7b72finallyTb4b4b4:
Tff7b72with Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffpath_table_lockTb4b4b4:
Tff7b72for Te6edf3dest Tff7b72in Te6edf3cleanupTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffpath_tableTff7b72.Td2a8ffpopTb4b4b4(Te6edf3destTb4b4b4, Tff7b72NoneTb4b4b4)


Tff7b72def Td2a8fftest_prune_path_table_to_soft_cap_drops_oldestTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3cleanup Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72tryTb4b4b4:
Te6edf3reticulum Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3reticulumTff7b72.Td2a8ffdrop_pathTff7b72.Td2a8ffreturn_value Tff7b72= Tff7b72True
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(T79c0ff3Tb4b4b4)Tb4b4b4:
Te6edf3dest Tff7b72= Tffa657bytesTb4b4b4(Tb4b4b4[Te6edf3i Tff7b72+ T79c0ff10Tb4b4b4]Tb4b4b4) Tff7b72* T79c0ff16
Te6edf3entry Tff7b72= Tb4b4b4[Tffa657floatTb4b4b4(Te6edf3iTb4b4b4)Tb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4]
Te6edf3_put_path_entryTb4b4b4(Te6edf3destTb4b4b4, Te6edf3entryTb4b4b4, Te6edf3cleanupTb4b4b4)
Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffpath_is_unresponsiveTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3dropped Tff7b72= Te6edf3rpTff7b72.Td2a8ffprune_path_table_to_soft_capTb4b4b4(
Te6edf3reticulumTb4b4b4,
Te6edf3soft_capTff7b72=T79c0ff1Tb4b4b4,
Te6edf3max_to_dropTff7b72=T79c0ff5Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3dropped Tff7b72>Tff7b72= T79c0ff1
Tff7b72assert Te6edf3reticulumTff7b72.Td2a8ffdrop_pathTff7b72.Td2a8ffcall_count Tff7b72>Tff7b72= T79c0ff1
Tff7b72finallyTb4b4b4:
Tff7b72with Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffpath_table_lockTb4b4b4:
Tff7b72for Te6edf3dest Tff7b72in Te6edf3cleanupTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffpath_tableTff7b72.Td2a8ffpopTb4b4b4(Te6edf3destTb4b4b4, Tff7b72NoneTb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────